home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1997-10-26 | 9.8 KB | 285 lines |
- (*----------------------------------------------------------------------*
- * *
- * MAGICTOOLS Modula's All purpose GEM Interface Cadre Toolbox *
- * ÿ ÿ ÿ ÿ ÿ *
- *----------------------------------------------------------------------*
- * Version 3.30 02.02.1992 (C)90/91/92 by Peter Hellinger Software *
- *----------------------------------------------------------------------*
- * Dieses Modul ist urheberrechtlich geschtzt. *
- * *
- * Die Verffentlichung des Quelltextes oder Teilen daraus, sowie die *
- * Verbreitung des bersetzten, nicht gelinkten Codes in schriftlicher, *
- * oder maschinenlesbarer Form, insbesondere in Zeitschriften, Mail- *
- * boxen oder anderen Medien bedarf der ausdrcklichen schriftlichen *
- * Einverstndnisserklrung des Autors. *
- * *
- * Die Verbreitung des Moduls als Teil eines gelinkten Programms ist *
- * fr Lizenznehmer ausdrcklich erlaubt! Der Autor behlt sich das *
- * Recht vor, diese Erlaubnis jederzeit und ohne Angaben von Grnden zu *
- * widerrufen. *
- *----------------------------------------------------------------------*)
-
- IMPLEMENTATION MODULE mtHelp;
-
- (*----------------------------------------------------------------------*
- * Int. Vers | Datum | Name | nderung *
- *-----------+----------+------+----------------------------------------*
- * 3.00 | 18.01.92 | Hp | *
- *-----------+----------+------+----------------------------------------*)
-
-
-
- (* IMPLEMENTATION FR >>> Megamax-Modula-2 <<< *)
- (* *)
- (*$R- Range-Checks *)
- (*$S- Stack-Check *)
- (* *)
- (*----------------------------------------------*)
-
-
-
-
-
-
- FROM MagicSys IMPORT Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
- Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
- Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
- sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET,
- CastToChar, CastToByte, CastToByteset, CastToInt,
- CastToCard, CastToBitset, CastToWord, CastToLInt,
- CastToLCard, CastToLBitset, CastToLWord, CastToAddr,
- TosVersion, Accessory, Basepage, SysHeader, TosDate;
-
-
-
-
-
-
- FROM SYSTEM IMPORT ADR, ADDRESS;
- FROM mtAppl IMPORT MaxWidth, MaxHeight, MouseOn, MouseArrow,
- MouseBusy, MouseOff, SetMouse, CharWidth,
- CharHeight, BoxWidth, BoxHeight, PrivateWS;
- FROM mtPopups IMPORT StringPopup;
- FROM mtArea IMPORT AREA, NewAREA, DisposeAREA, SaveArea, RestoreArea;
- FROM mtTerminal IMPORT TERMINAL, Terminal, DeleteLine, Xpos, Ypos,
- Width, Height, WriteChar, Attribute,
- WriteLine, WriteConst, WriteLn, Attribut,
- CursorOn, CursorOff, WrapOff, WrapOn,
- ClearLine, ClearScreen, InversOn,
- InversOff, SetAttribut, OpenTerminal,
- CloseTerminal, ChangeTerminal, ClipRect;
- FROM mtTextfiles IMPORT TEXTFILE, READ, OpenTextfile, CloseTextfile,
- Reset, EndofText, ReadChar, ReadLine, ReadLn,
- ReadSpec, ReadCard, ReadInt;
- FROM mtUtils IMPORT tRect, ObjcFrame, CalcArea;
- FROM MagicStrings IMPORT Assign, Append, Equal, Length;
- FROM MagicAES IMPORT ShelFind, FormAlert, GrafHandle, OBJECT,
- TEDINFO, ObjcDraw, ObjcAdd, GBOX, GBOXTEXT,
- WindGet, WFFULLXYWH;
-
-
- CONST Cntrl = '@';
- Error = '[3][|Fehler beim ffnen der Hilfsdatei][ABBRUCH]';
-
- VAR file: TEXTFILE;
- menu: ARRAY [0..2] OF OBJECT;
- title: TEDINFO;
- back: AREA;
- t, old: TERMINAL;
- init, exit: BOOLEAN;
- level: sINTEGER;
- tstr: ARRAY [0..255] OF CHAR;
- pop2: ARRAY [0..40] OF CHAR;
- r, br, scr: tRect;
-
-
- PROCEDURE Schreibzeile (VAR in: ARRAY OF CHAR);
- VAR out: ARRAY [0..255] OF CHAR;
- i, j: sCARDINAL;
- set: Attribut;
- d: lCARDINAL;
- x: sINTEGER;
-
- PROCEDURE Attrib (bit: Attribute);
- BEGIN
- IF bit IN set THEN EXCL (set, bit); ELSE INCL (set, bit); END;
- SetAttribut (set);
- END Attrib;
-
- BEGIN
- i:= 0; j:= 0; set:= Attribut {}; exit:= FALSE;
- LOOP
- IF (in[i] = 0C) OR (i > HIGH(in)) THEN
- EXIT;
- ELSIF in[i] = '%' THEN
- INC (i);
- IF in[i] = '%' THEN
- out[j]:= in[i]; INC (i); INC (j);
- ELSE
- out[j]:= 0C; WriteLine (out); j:= 0;
- CASE CAP(in[i]) OF
- 'U': Attrib (underline);|
- 'F': Attrib (fat);|
- 'I': Attrib (italic);|
- 'H': Attrib (invers);|
- 'L': Attrib (light);|
- 'S': Attrib (superscript);|
- 'T': Attrib (subscript);|
- 'C': ClearScreen;|
- 'K': Assign (' Weiter| Hilfe abbrechen', pop2);
- IF StringPopup (pop2, '') # 0 THEN exit:= TRUE; RETURN; END;|
- ELSE ;
- END;
- INC (i);
- END;
- ELSE
- out[j]:= in[i]; INC (i); INC (j);
- END;
- END;
- out[j]:= 0C; WriteLine (out); WriteLn;
- END Schreibzeile;
-
-
- PROCEDURE SetTitle (VAR str: ARRAY OF CHAR);
-
- BEGIN
-
- Assign (str, tstr); tstr[0]:= ' '; Append (' ', tstr);
- END SetTitle;
-
-
- PROCEDURE OpenWindow (VAR str: ARRAY OF CHAR; VAR x, y, s, z: sINTEGER);
- VAR b: BOOLEAN;
- i,j,l: sINTEGER;
- BEGIN
- SetTitle (str);
- (*-- Basisobjekt --*)
- WITH menu[0] DO
- obNext:= -1; obHead:= 1; obTail:= 0;
- obType:= GBOX; obFlags:= {}; obState:= {};
- obSpec.Box.char:= 0C;
- obSpec.Box.frame:= 377C;
- obSpec.Box.flags:= {Bit12, Bit11};
- r.x:= x - 4; obX:= r.x;
- r.y:= y - 4; obY:= r.y;
- r.w:= (s * CharWidth) + 4;
- obWidth:= r.w;
- r.h:= (z * CharHeight) + CharHeight + 4;
- obHeight:= r.h;
- END;
- (*-- Titelzeile --*)
- WITH menu[1] DO
- obNext:= -1; obHead:= -1; obTail:= -1;
- obType:= GBOXTEXT; obFlags:= {}; obState:= {};
- obSpec.TedPtr:= ADR (title);
- obX:= 0; obY:= 0; obWidth:= r.w; obHeight:= CharHeight;
- END;
- ObjcAdd (ADR (menu), 0, 1);
- WITH title DO
- tePtext:= ADR (tstr); tePtmplt:= ADR (tstr); tePvalid:= ADR (tstr);
- teFont:= 3; teFontid:= 0; teJust:= 2; teColor:= 011A1H;
- teFontsize:= 0; teThickness:= -1;
- teTxtlen:= Length (tstr); teTmplen:= teTxtlen;
- END;
- INC (r.x); r.y:= r.y + CharHeight + 2;
- DEC (r.w, 2); r.h:= r.h - CharHeight - 3;
- t:= OpenTerminal (r);
- old:= ChangeTerminal (t);
- DEC (r.x); DEC (r.y); INC (r.w, 2); INC (r.h, 2);
- b:= NewAREA (back);
- CalcArea (ADR(menu), 0, br);
- b:= SaveArea (PrivateWS, back, br);
- ObjcDraw (ADR (menu), 0, 8, br);
- ClearScreen; WrapOn;
- END OpenWindow;
-
- PROCEDURE Help (name, selstring: ARRAY OF CHAR);
- (* Korrigierte Version von Steffen Engel *)
- VAR str, selectstring: ARRAY [0..255] OF CHAR;
- select: ARRAY [1..20],[0..20] OF CHAR;
- pop: ARRAY [0..450] OF CHAR;
- b: BOOLEAN;
- i,j,k,l,s,x: sINTEGER;
- ende : BOOLEAN;
-
- BEGIN
- (* selstring in eigene Variable umspeichern, um damit arbeiten zu knnen *)
- Assign(selstring, selectstring);
-
- (* Initialisierung *)
- Assign(name, str); ShelFind (str);
- IF NOT OpenTextfile (str, READ, 1024, file) THEN
- i:= FormAlert (1, Error); RETURN;
- END;
- Reset (file);
- ReadInt (file, i); ReadInt (file, j);
- ReadInt (file, k); ReadInt (file, l); ReadLn (file);
- OpenWindow (selectstring, i, j, k, l);
- ende := FALSE;
- exit := FALSE;
-
- REPEAT (* solange nach weiteren Hilfen gefragt wird *)
- Reset(file);
- (* Hilfe suchen *)
- LOOP
- IF EndofText (file) THEN ende := TRUE; EXIT; END;
- ReadLine (file, str); ReadLn (file);
- IF Equal (str, selectstring) THEN EXIT; END;
- END;
- IF ~ende
- THEN
- SetTitle (str);
- ObjcDraw (ADR (menu), 0, 8, r);
- ClearScreen;
- (* Hilfstext ausgeben *)
- LOOP
- IF EndofText (file)
- THEN
- ende := TRUE;
- EXIT;
- END;
- ReadLine (file, str); ReadLn (file);
- IF str[0] = '@' THEN EXIT; END;
- Schreibzeile (str);
- IF exit
- THEN
- ende := TRUE;
- EXIT;
- END;
- END;
- IF NOT exit THEN
- pop[0]:= 0C; s:= 1; x:= 0;
- LOOP
- IF EndofText (file) THEN ende := TRUE; EXIT; END;
- ReadLine (file, str); ReadLn (file);
- IF str[0] = Cntrl THEN EXIT; END;
- select[s]:= Cntrl; Append (str, select[s]); INC (s);
- Append (' ', pop); Append (str, pop); Append (' |', pop);
- END;
- IF ~ende
- THEN
- Append (' Hilfe beenden', pop);
- i:= StringPopup (pop, ' Weitere Hilfen ');
- IF (i > 0) AND (i < s)
- THEN
- Assign(select[i], selectstring);
- ELSE
- ende := TRUE;
- END;
- END;
- END;
- END;
- UNTIL ende;
-
- (* Bildschirm restaurieren *)
- CloseTerminal (t);
- t:= ChangeTerminal (old);
- RestoreArea (PrivateWS, back); DisposeAREA (back);
- CloseTextfile (file);
- END Help;
-
- BEGIN
- init:= FALSE;
- END mtHelp.
-
-